package cn.tedu.stu;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Junit {
    // Junit支持在运行测试方法前或测试方法后运行指定代码
    // 来减少每次测试方法代码的冗余,提高测试效率

    // 声明Spring容器对象作为成员变量,以便多个方法来调用
    AnnotationConfigApplicationContext acac;
    // @Before标记的方法会自动在@Test标记的测试方法运行之前运行
    @Before
    public void init(){
        acac=new
         AnnotationConfigApplicationContext(StuConfig.class);
        System.out.println("Before执行");
    }
    // @After标记的方法会在测试方法运行之后自动运行
    @After
    public void destroy(){
        acac.close();
        System.out.println("After运行");
    }


    // @Test注解表示下面的方法是一个可以直接运行的测试方法
    // 方法的名称等格式没有要求,直接运行
    @Test
    public void stu(){
//        AnnotationConfigApplicationContext acac=
//         new AnnotationConfigApplicationContext(StuConfig.class);
        Stu s=acac.getBean("stu",Stu.class);
        System.out.println(s);
//        acac.close();
    }

    // 测试单例作用域效果
    @Test
    public void singleton(){
        // 从Spring容器中先后获得两次id为stu的对象
        Stu s1=acac.getBean("stu",Stu.class);
        Stu s2=acac.getBean("stu",Stu.class);

        // 修改s1的属性
        s1.setName("猪悟能");
        System.out.println(s2);

        System.out.println(s1==s2);


    }



}
